#include "preset_control/preset_control.hpp"

/******************************************************************************
 *
 * @brief:    数据储存
 *
 ******************************************************************************/

EEPROM *eeprom;
DATA_SAVE *global_data;


/******************************************************************************
 *
 * @brief:    电参数测量
 *
 ******************************************************************************/


double transfer_adc_value_to_need_V(uint32_t adc_value)
{
    double pin_V; //adc管脚电压
    double result; //实际输入电压

    pin_V = adc_value * 3.3 / 4096; //adc管脚电压换算
    result = pin_V*5.2531 + 0.0043;

    return result;
}

CHIP_ADC *voltage_device;

/******************************************************************************
 *
 * @brief:    光流传感器预定义
 *
 ******************************************************************************/

CHIP_SPI* flow_spi;
CHIP_INPUT_PIN* flow_motion;
CHIP_OUTPUT_PIN* flow_reset;

PMW3901* flow_device;

/******************************************************************************
 *
 * @brief:    风扇预定义
 *
 ******************************************************************************/

CHIP_PWM* fan_pwm;


/******************************************************************************
 *
 * @brief:    补光板预定义
 *
 ******************************************************************************/
CHIP_PWM* led_board_pwm;

/******************************************************************************
 *
 * @brief:    超声波预定义
 *
 ******************************************************************************/
CHIP_OUTPUT_PIN *ultra_sonic_en;
CHIP_UART* ultra_sonic_uart;


/******************************************************************************
 *
 * @brief:    模拟轮速预定义
 *
 ******************************************************************************/
CHIP_OUTPUT_PIN *A;
CHIP_OUTPUT_PIN *B;
SIMULATE_SIGNAL *sim_sig;

/******************************************************************************
 *
 * @brief:    预定义实例化
 *
 ******************************************************************************/
void preset_create_obj()
{
    /******************************************************************************
     *
     * @brief:    数据储存
     *
     ******************************************************************************/

    eeprom =new EEPROM(GET_PIN(B, 7),
                    "i2c1",
                    128,
                    64 * 1024,
                    EEPROM_identity_code_BL24C512A_normal,
                    EEPROM_A2A1A0_mode_0_0_0,
                    EEPROM_word_addr_bit_16);


    global_data =new DATA_SAVE(eeprom,0,1,1,5,6,100);


    /******************************************************************************
     *
     * @brief:    电参数测量
     *
     ******************************************************************************/

    voltage_device =new CHIP_ADC ("adc1", 1, 100, FA_Filter_Type_AA, transfer_adc_value_to_need_V);

    /******************************************************************************
     *
     * @brief:    光流传感器
     *
     ******************************************************************************/

    flow_spi =new CHIP_SPI ("spi1", "pmw3901", GPIO_PIN_4, GPIOA, 8, 1*1000*1000, (RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB));
    flow_motion =new CHIP_INPUT_PIN (GET_PIN(C,5), chip_input_pin_mode_simple, chip_input_pin_pull_mode_none, NULL, NULL);
    flow_reset =new CHIP_OUTPUT_PIN (GET_PIN(C,4), chip_output_pin_out_mode_normal, chip_pin_level_HIGH);

    flow_device =new PMW3901 (flow_spi, flow_reset, flow_motion);

    /******************************************************************************
     *
     * @brief:    风扇
     *
     ******************************************************************************/


    fan_pwm = new CHIP_PWM ("pwm12", 2, chip_pwm_drive_type_HIGH, 500, 99);


    /******************************************************************************
     *
     * @brief:    补光板
     *
     ******************************************************************************/
    led_board_pwm = new CHIP_PWM ("pwm12", 1, chip_pwm_drive_type_HIGH, 500, 99);

    /******************************************************************************
     *
     * @brief:    超声波
     *
     ******************************************************************************/
    struct serial_configure serial_config =
    {
     BAUD_RATE_115200,
     DATA_BITS_8,
     STOP_BITS_1,
     PARITY_NONE,
     BIT_ORDER_LSB,
     NRZ_NORMAL,
      256,
      RT_SERIAL_FLOWCONTROL_NONE,
     0
    };
    ultra_sonic_en = new CHIP_OUTPUT_PIN(GET_PIN(C,8),chip_output_pin_out_mode_normal,chip_pin_level_LOW);
    ultra_sonic_uart = new CHIP_UART("uart6",&serial_config);

    /******************************************************************************
     *
     * @brief:    模拟轮速预定义
     *
     ******************************************************************************/
    A = new CHIP_OUTPUT_PIN (GET_PIN(B,9), chip_output_pin_out_mode_normal, chip_pin_level_LOW);
    B = new CHIP_OUTPUT_PIN (GET_PIN(B,8), chip_output_pin_out_mode_normal, chip_pin_level_LOW);;
    sim_sig = new SIMULATE_SIGNAL(A,B,100);




}
